home *** CD-ROM | disk | FTP | other *** search
/ CD BIT 75 / CD BIT 75.iso / Software / hbqsd-download.exe / $INSTDIR / helpmenu.js < prev    next >
Encoding:
Text File  |  2004-10-30  |  6.7 KB  |  230 lines

  1. function registerMenuHook( menuHook )
  2. {
  3.   if ( typeof menuHooks == 'undefined' )
  4.     menuHooks = new Array();
  5.     
  6.   menuHooks.push( menuHook );
  7. }
  8.  
  9. function searchCompareWithSubcatPath( s1, s2 )
  10. {
  11.   var s1_subcatPath = "";
  12.   var s2_subcatPath = "";
  13.  
  14.   if ( s1.subcats && s1.subcats.length >= 1 ) {
  15.     for ( var isubmenu = 0; isubmenu < s1.subcats.length; isubmenu++ ) {
  16.       s1_subcatPath += '~' + s1.subcats[ isubmenu ].toLowerCase();
  17.     }
  18.   }
  19.  
  20.   if ( s2.subcats && s2.subcats.length >= 1 ) {
  21.     for ( var isubmenu = 0; isubmenu < s2.subcats.length; isubmenu++ ) {
  22.       s2_subcatPath += '~' + s2.subcats[ isubmenu ].toLowerCase();
  23.     }
  24.   }
  25.  
  26.   if (s1_subcatPath == "" && s2_subcatPath != "") return 1;
  27.   if (s1_subcatPath != "" && s2_subcatPath == "") return -1;
  28.   if (s1_subcatPath < s2_subcatPath) return -1;
  29.   if (s1_subcatPath > s2_subcatPath) return 1;
  30.  
  31.   return searchCompare(s1, s2)
  32. }
  33.  
  34. function showpop()
  35. {
  36.   document.deff.q.focus();
  37.   document.deff.q.createTextRange().select();
  38.   var mb = new ActiveXObject("DQSDTools.MenuBuilder");
  39.  
  40.   // Align the menu with the button
  41.   mb.HorizontalAlignment = ( buttonalign == 'left' ? 1 : 2 ); // 1 = left, 2 = right (default)
  42.   
  43.   mb.AppendMenuItem( local(ABOUT_TEXT), "about", "Help on using the HotBot Quick Search Deskbar" );
  44.   mb.AppendMenuItem( "Check for update...", "checkWebForUpdateNotifyAll", "Check for update to the HotBot Quick Search Deskbar" );
  45.   mb.AppendSeparator( 0 );
  46.   
  47.   menuHandles = new Object();
  48.  
  49.   for (i = 0; i < categoryarray.length; i++)
  50.   {
  51.     var categoryName = categoryarray[i];
  52.     var helparray = categories[categoryName];
  53.     
  54.     // Are there any enabled searches in this category?
  55.     for (var k = 0; k < helparray.length && (!helparray[k].enabled || helparray[k].nomenu); k++)
  56.     {
  57.     }
  58.  
  59.     // If all the searches are disabled in the category, don't add a submenu
  60.     if ( k == helparray.length )
  61.       continue;
  62.  
  63.     var hcatmenu = mb.AppendSubMenu( categoryName );
  64.     helparray.sort( searchCompareWithSubcatPath );
  65.     for (var k = 0; k < helparray.length; k++)
  66.     {
  67.       var search = helparray[k];
  68.       var alias = getSearchAliases( search );
  69.  
  70.       if ( search.enabled && !search.nomenu )
  71.       {
  72.       
  73.         // If there are subcategories, nest them
  74.         if ( search.subcats && search.subcats.length >= 1 )
  75.         {
  76.           subcatPath = categoryName;
  77.           hsubmenu = hcatmenu;
  78.           for ( var isubmenu = 0; isubmenu < search.subcats.length; isubmenu++ )
  79.           {
  80.             subcatPath += '~' + search.subcats[ isubmenu ];
  81.             if ( menuHandles[ subcatPath ] )
  82.               hsubmenu = menuHandles[ subcatPath ]
  83.             else
  84.             {
  85.               hsubmenu = mb.AppendSubMenu( search.subcats[ isubmenu ], hsubmenu );
  86.               menuHandles[ subcatPath ] = hsubmenu;
  87.             }
  88.           }
  89.         }
  90.         else // no subcategories, append menu items
  91.         {
  92.           hsubmenu = hcatmenu;
  93.         }
  94.         
  95.         // Remove HTML tags from name
  96.         var searchname = search.name.replace( /<[^<]*>/g, '' );
  97.       
  98.         mb.AppendMenuItem( searchname + (search.local ? ' [local]' : '' )  + '\t' + (search.aliasmenudisplay ? alias.replace(/&/g, '&&') : ""),  // menu text along with alias
  99.                            search.aliases[0],         // function invoked when user selects menu item
  100.                            makeToolTipString(search), 
  101.                            hsubmenu );
  102.       }
  103.     }
  104.   }
  105.   
  106.   // Add any hooks created by searches or add-ons
  107.   if ( typeof menuHooks != 'undefined' )
  108.   {
  109.     for ( var i = 0; i < menuHooks.length; i++ )
  110.     {
  111.       menuHooks[i]( mb );        
  112.     }
  113.   }
  114.  
  115.   appendMRUMenuSelections( mb );
  116.  
  117.   if(helpMenuToolTipsEnabled)
  118.   {
  119.     try
  120.     {
  121.       if(typeof helpMenuToolTipsDisplayTime == 'undefined')
  122.       {
  123.          helpMenuToolTipsDisplayTime = 3;
  124.       }
  125.  
  126.       mb.InitialiseTooltips(helpMenuToolTipsDisplayTime);
  127.     }
  128.     catch(e)
  129.     {
  130.       alert("Error initialising tooltips for menus: " + e.description);
  131.     }
  132.   }
  133.  
  134.   var fn = mb.Display(document);
  135.   if ( fn )
  136.   {
  137.     var alias = null;
  138.     if ( isInternalSearch( fn ) )
  139.       alias = searches[fn].aliases[1];
  140.     mnu( fn, alias );
  141.     if (searches[fn])
  142.       saveMenuHistory( alias ? alias : fn );
  143.   }
  144.   return false;
  145. }
  146.  
  147. function saveMenuHistory( alias )
  148. {
  149.   var menuContent = null;
  150.   try
  151.   {
  152.     menuContent = readFile( "mrumenu.txt" );
  153.   }
  154.   catch (e) {}
  155.   var menus = menuContent ? menuContent.replace(/\r\n/g, '\n').split('\n') : new Array(0);
  156.   
  157.   var exists = false;
  158.   var newmenus = new Array(0);
  159.   for ( var i = 0; i < menus.length; i++ )
  160.   {
  161.     if ( menus[i].toLowerCase() != alias )
  162.       newmenus.push( menus[i] );
  163.     else
  164.       exists = true;
  165.   }
  166.   if ( exists )
  167.     menus = (alias + '\n' + newmenus.join('\n')).split('\n');
  168.   
  169.   menus.push( alias );
  170.   if ( menus.length > menuMRUlength )
  171.     menus.splice( 0, menus.length - menuMRUlength );
  172.   writeFile( "mrumenu.txt", menus.join('\r\n') );
  173. }
  174.  
  175. function appendMRUMenuSelections( mb )
  176. {
  177.   var menuContent = null;
  178.   try
  179.   {
  180.     menuContent = readFile( "mrumenu.txt" );
  181.   }
  182.   catch (e) {}
  183.   if ( menuContent )
  184.   {
  185.     mb.AppendSeparator( 0 );
  186.     var menus = menuContent.replace(/\r\n/g, '\n').split('\n');
  187.     for ( var i = 0; i < menus.length; i++ )
  188.     {
  189.       for ( var iSearch in searches )
  190.       {
  191.         var search = searches[iSearch];
  192.         if ( search.aliases )
  193.         for ( var iAlias = 0; iAlias < search.aliases.length; iAlias++ )
  194.         {
  195.           if ( menus[i] == search.aliases[iAlias] )
  196.           {
  197.             var alias = getSearchAliases( search );
  198.             
  199.             // Create 'mneumonic' using the last digit of the number
  200.             var mnemonic = (menus.length - i).toString();
  201.             mnemonic = mnemonic.substr( 0, mnemonic.length - 1 ) + "&" + mnemonic.substr( mnemonic.length - 1 );
  202.             mb.AppendMenuItem( mnemonic + "  " + search.name + '\t' + alias, search.aliases[0], makeToolTipString(search) );
  203.             break;
  204.           }
  205.         }
  206.       }
  207.     }
  208.   }
  209.   
  210. }
  211.  
  212. function makeToolTipString(search)
  213. {
  214.   var tip = '';
  215.   if ( helpMenuToolTipsEnabled )
  216.   {
  217.     if ( search.desc != '' && search.desc != search.name )
  218.     {
  219.       tip = search.desc
  220.                   .replace( /<[^>]+>/g, '' )          // any tags
  221.                   .replace( /(^\s*)|(\s*$)/g, '' )    // leading/trailing whitespace
  222.                   .replace( /\r\n\s*\r\n/g, '\r\n' )  // blank lines
  223.                   .replace( />/g, '>' )            // HTML gunk
  224.                   .replace( /</g, '<' )
  225.                   .replace( /&/g, '&' )
  226.                   .replace( /\t/g, '    ' )           // reduce indentation
  227.     }
  228.   }
  229.   return tip;
  230. }